# 商品信息的数据存放（商品编号，商品名称，商品价格）
goods_list = [  # 解题思路
    ["iphone", 6000],  # 商品信息一般用列表存储，由于每个商品的信息内容多即（每个商品内容是一个多个值的值）所以选用list把每个不同商品的信息存储在小列表中
    ["watch", 3000],  # 每个不同的商品信息形成列表 就相当于在大列表中嵌套小列表  用列表的方式会比直接用字符串更加清晰易读
    ["computer", 8800],
    ["Mac Por", 10000],
    ["MediaPad", 12000],
    ["奶茶", 20]
]
# 用户购物信息的数据存放
user_shopping_list = []  # 购物车列表 初始状态为空  增加商品进去要用append()方法
# 用户输入余额信息
while True:
    Alipay = input("请输入支付宝余额：")
    if Alipay.isdigit():  # 检测字符串是否只由数字组成。
        Alipay = int(Alipay)  # input实际输入为字符串，强制转换为整数，便于之后的计算
        break
    else:
        print('输入有误或输入的不是整数,请重新输入您的余额')
# 打印商品信息                                            #下面的商品价格列没有排整齐的原因是为了最终打印出来的商品清单更加整齐美观
# info = '''--------------- 商 品 清 单 ----------------
# 商品编号：%s, 商品名称：%s,    商品价格：%s 元
# 商品编号：%s, 商品名称：%s,     商品价格：%s 元
# 商品编号：%s, 商品名称：%s,  商品价格：%s 元
# 商品编号：%s, 商品名称：%s,   商品价格：%s 元
# 商品编号：%s, 商品名称：%s,  商品价格：%s 元
# 商品编号：%s, 商品名称：%s,      商品价格：%s 元
# '''%(0,goods_list[0][0],goods_list[0][1],     # 这里是把每个商品在列表中的索引值作为它的商品编号   也可以另外取编号
#      1,goods_list[1][0],goods_list[1][1],
#      2,goods_list[2][0],goods_list[2][1],
#      3,goods_list[3][0],goods_list[3][1],
#      4,goods_list[4][0],goods_list[4][1],
#      5,goods_list[5][0],goods_list[5][1],
# )
# print(info)
# 如果要打印的信息数据非常多 则用for循环来做这些重复的事情是最佳选择 for循环经常用于需要写很多重复代码的事情
print("祝您购物愉快！")
while True:
    # 打印商品信息
    print('-------------- 商 品 清 单 --------------')
    for i in range(len(goods_list)):  # for循环的内容范围在商品列表中，所以列表内有多少个元素对象 for就需要遍历（即range循环）多少次  在list中列表的长度用len()方法
        print("商品编号：%s, 商品名称：%s, 商品价格：%s 元" % (i, goods_list[i][0], goods_list[i][1]))  # %(这里为占位符所代表的值  ) 列表嵌套取值法：list[在最大列表中的索引值][在最小列表中的索引值]
    #    print(i)             #  这里i为0，1，2，3，4，5  即索引值，我们用索引值来代表商品的编号

    # 用户输入商品编号，实现商品的查询
    choice = input("请输入商品编号（如果您想退出请按q）：")  # input默认输入的是字符串 要把它变为数值用int
    if choice.isdigit():  # isdigit() 用来判断choice的值是否为数值
        choice = int(choice)  # 如果不是就将其转化为整数
        # 判断编号是否存在
        if choice < len(goods_list) and choice >= 0:  # 用户输入的编号存在 且同时满足大于或等于0和小于商品清单的长度时才会执行
            # 判断  若 用户余额 > 商品价格
            if Alipay > goods_list[choice][1]:
                user_shopping_list.append(goods_list[choice])  # 把用户购买的商品加入购物单列表中
                Alipay = Alipay - goods_list[choice][1]  # 用户余额发生变化 计算出此次消费后的余额
                print("您购买的%s 已加到购物车,您当前余额为：%s" % (goods_list[choice][0], Alipay))
            else:  # 用户余额 < 商品价格
                print("您的余额不足，请更换支付方式继续购买")
                break
        else:  # 编号不存在
            print("请输入正确的商品编号，您输入的商品编号不存在")
    elif choice == "q":  # 用户退出当前程序
        print("------------ 购物清单 ------------")
        for i in range(len(user_shopping_list)):
            print("%s. 名称：%s  价格：%s 元 " %(i, user_shopping_list[i][0], user_shopping_list[i][1]))
        print("共计:",len(user_shopping_list),"样商品")
        print("您的余额还有：%s元" %(Alipay))
        print("----- 谢谢惠顾，欢迎您的下次光临！-----")
        break
    else:  # 用户输入的商品编号是小数时
        print("您输入的方式有误，请重新输入清单中正确的商品编号")


